<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/io.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/io.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfSU9fSF8w"><span class="b">_ASM_X86_IO_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfSU9fSF8w"><span class="b">_ASM_X86_IO_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="k">/*</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="k"> * This file contains the definitions for the x86 IO instructions</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="k"> * inb/inw/inl/outb/outw/outl and the &quot;string versions&quot; of the same</span>
<a name="7" /><span class="Maybe">       7:</span> <span class="k"> * (insb/insw/insl/outsb/outsw/outsl). You can also use &quot;pausing&quot;</span>
<a name="8" /><span class="Maybe">       8:</span> <span class="k"> * versions of the single-IO instructions (inb_p/inw_p/..).</span>
<a name="9" /><span class="Maybe">       9:</span> <span class="k"> *</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="k"> * This file is not meant to be obfuscating: it&apos;s just complicated</span>
<a name="11" /><span class="Maybe">      11:</span> <span class="k"> * to (a) handle it all in a way that makes gcc able to optimize it</span>
<a name="12" /><span class="Maybe">      12:</span> <span class="k"> * as well as possible and (b) trying to avoid writing the same thing</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="k"> * over and over again with slight variations and possibly making a</span>
<a name="14" /><span class="Maybe">      14:</span> <span class="k"> * mistake somewhere.</span>
<a name="15" /><span class="Maybe">      15:</span> <span class="k"> */</span>
<a name="16" /><span class="Maybe">      16:</span> 
<a name="17" /><span class="Maybe">      17:</span> <span class="k">/*</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="k"> * Thanks to James van Artsdalen for a better timing-fix than</span>
<a name="19" /><span class="Maybe">      19:</span> <span class="k"> * the two short jumps: using outb&apos;s to a nonexistent port seems</span>
<a name="20" /><span class="Maybe">      20:</span> <span class="k"> * to guarantee better timings even on fast machines.</span>
<a name="21" /><span class="Maybe">      21:</span> <span class="k"> *</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="k"> * On the other hand, I&apos;d like to be sure of a non-existent port:</span>
<a name="23" /><span class="Maybe">      23:</span> <span class="k"> * I feel a bit unsafe about using 0x80 (should be safe, though)</span>
<a name="24" /><span class="Maybe">      24:</span> <span class="k"> *</span>
<a name="25" /><span class="Maybe">      25:</span> <span class="k"> *        Linus</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="k"> */</span>
<a name="27" /><span class="Maybe">      27:</span> 
<a name="28" /><span class="Maybe">      28:</span>  <span class="k">/*</span>
<a name="29" /><span class="Maybe">      29:</span> <span class="k">  *  Bit simplified and optimized by Jan Hubicka</span>
<a name="30" /><span class="Maybe">      30:</span> <span class="k">  *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999.</span>
<a name="31" /><span class="Maybe">      31:</span> <span class="k">  *</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="k">  *  isa_memset_io, isa_memcpy_fromio, isa_memcpy_toio added,</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k">  *  isa_read[wl] and isa_write[wl] fixed</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="k">  *  - Arnaldo Carvalho de Melo &lt;acme@conectiva.com.br&gt;</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="k">  */</span>
<a name="36" /><span class="Maybe">      36:</span> 
<a name="37" /><span class="Maybe">      37:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVJDSF9IQVNfSU9SRU1BUF9XQ18w"><span class="b">ARCH_HAS_IOREMAP_WC</span></a>
<a name="38" /><span class="Maybe">      38:</span> 
<a name="39" /><span class="Maybe">      39:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">string</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="41" /><span class="Maybe">      41:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">page</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="42" /><span class="Maybe">      42:</span> 
<a name="43" /><span class="Maybe">      43:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">size</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">)</span> \
<a name="44" /><span class="Maybe">      44:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">type</span> <span class="b">name</span><span class="f">(</span><span class="m">const</span> <span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">)</span> \
<a name="45" /><span class="Maybe">      45:</span> <span class="f">{</span> <span class="b">type</span> <span class="b">ret</span><span class="f">;</span> <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov&quot;</span> <span class="b">size</span> <span class="e">&quot; %1,%0&quot;</span><span class="f">:</span><span class="b">reg</span> <span class="f">(</span><span class="b">ret</span><span class="f">)</span> \
<a name="46" /><span class="Maybe">      46:</span> <span class="f">:</span><span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="m">volatile</span> <span class="b">type</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">addr</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">)</span><span class="f">;</span> <span class="m">return</span> <span class="b">ret</span><span class="f">;</span> <span class="f">}</span>
<a name="47" /><span class="Maybe">      47:</span> 
<a name="48" /><span class="Maybe">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">size</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">)</span> \
<a name="49" /><span class="Maybe">      49:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">name</span><span class="f">(</span><span class="b">type</span> <span class="b">val</span><span class="f">,</span> <span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">)</span> \
<a name="50" /><span class="Maybe">      50:</span> <span class="f">{</span> <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov&quot;</span> <span class="b">size</span> <span class="e">&quot; %0,%1&quot;</span><span class="f">:</span> <span class="f">:</span><span class="b">reg</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> \
<a name="51" /><span class="Maybe">      51:</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="m">volatile</span> <span class="b">type</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">addr</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">)</span><span class="f">;</span> <span class="f">}</span>
<a name="52" /><span class="Maybe">      52:</span> 
<a name="53" /><span class="Maybe">      53:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">readb</span><span class="f">,</span> <span class="e">&quot;b&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">char</span><span class="f">,</span> <span class="e">&quot;=q&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="54" /><span class="Maybe">      54:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">readw</span><span class="f">,</span> <span class="e">&quot;w&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">short</span><span class="f">,</span> <span class="e">&quot;=r&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="55" /><span class="Maybe">      55:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">readl</span><span class="f">,</span> <span class="e">&quot;l&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span><span class="f">,</span> <span class="e">&quot;=r&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="56" /><span class="Maybe">      56:</span> 
<a name="57" /><span class="Maybe">      57:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">__readb</span><span class="f">,</span> <span class="e">&quot;b&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">char</span><span class="f">,</span> <span class="e">&quot;=q&quot;</span><span class="f">,</span> <span class="f">)</span>
<a name="58" /><span class="Maybe">      58:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">__readw</span><span class="f">,</span> <span class="e">&quot;w&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">short</span><span class="f">,</span> <span class="e">&quot;=r&quot;</span><span class="f">,</span> <span class="f">)</span>
<a name="59" /><span class="Maybe">      59:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><span class="b">__readl</span><span class="f">,</span> <span class="e">&quot;l&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span><span class="f">,</span> <span class="e">&quot;=r&quot;</span><span class="f">,</span> <span class="f">)</span>
<a name="60" /><span class="Maybe">      60:</span> 
<a name="61" /><span class="Maybe">      61:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">writeb</span><span class="f">,</span> <span class="e">&quot;b&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">char</span><span class="f">,</span> <span class="e">&quot;q&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="62" /><span class="Maybe">      62:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">writew</span><span class="f">,</span> <span class="e">&quot;w&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">short</span><span class="f">,</span> <span class="e">&quot;r&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="63" /><span class="Maybe">      63:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">writel</span><span class="f">,</span> <span class="e">&quot;l&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span><span class="f">,</span> <span class="e">&quot;r&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="64" /><span class="Maybe">      64:</span> 
<a name="65" /><span class="Maybe">      65:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">__writeb</span><span class="f">,</span> <span class="e">&quot;b&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">char</span><span class="f">,</span> <span class="e">&quot;q&quot;</span><span class="f">,</span> <span class="f">)</span>
<a name="66" /><span class="Maybe">      66:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">__writew</span><span class="f">,</span> <span class="e">&quot;w&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">short</span><span class="f">,</span> <span class="e">&quot;r&quot;</span><span class="f">,</span> <span class="f">)</span>
<a name="67" /><span class="Maybe">      67:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><span class="b">__writel</span><span class="f">,</span> <span class="e">&quot;l&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span><span class="f">,</span> <span class="e">&quot;r&quot;</span><span class="f">,</span> <span class="f">)</span>
<a name="68" /><span class="Maybe">      68:</span> 
<a name="69" /><span class="Maybe">      69:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmVhZGJfcmVsYXhlZF8w"><span class="b">readb_relaxed</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="b">__readb</span><span class="f">(</span><span class="b">a</span><span class="f">)</span>
<a name="70" /><span class="Maybe">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmVhZHdfcmVsYXhlZF8w"><span class="b">readw_relaxed</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="b">__readw</span><span class="f">(</span><span class="b">a</span><span class="f">)</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmVhZGxfcmVsYXhlZF8w"><span class="b">readl_relaxed</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="b">__readl</span><span class="f">(</span><span class="b">a</span><span class="f">)</span>
<a name="72" /><span class="Maybe">      72:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfcmVhZGJfMA__"><span class="b">__raw_readb</span></a> <span class="b">__readb</span>
<a name="73" /><span class="Maybe">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfcmVhZHdfMA__"><span class="b">__raw_readw</span></a> <span class="b">__readw</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfcmVhZGxfMA__"><span class="b">__raw_readl</span></a> <span class="b">__readl</span>
<a name="75" /><span class="Maybe">      75:</span> 
<a name="76" /><span class="Maybe">      76:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfd3JpdGViXzA_"><span class="b">__raw_writeb</span></a> <span class="b">__writeb</span>
<a name="77" /><span class="Maybe">      77:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfd3JpdGV3XzA_"><span class="b">__raw_writew</span></a> <span class="b">__writew</span>
<a name="78" /><span class="Maybe">      78:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfd3JpdGVsXzA_"><span class="b">__raw_writel</span></a> <span class="b">__writel</span>
<a name="79" /><span class="Maybe">      79:</span> 
<a name="80" /><span class="Maybe">      80:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bW1pb3diXzA_"><span class="b">mmiowb</span></a><span class="f">(</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">(</span><span class="f">)</span>
<a name="81" /><span class="Maybe">      81:</span> 
<a name="82" /><span class="Maybe">      82:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="83" /><span class="Maybe">      83:</span> 
<a name="84" /><span class="Maybe">      84:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb19yZWFkXzA_"><span class="b">build_mmio_read</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_cmVhZHFfMA__"><span class="b">readq</span></a><span class="f">,</span> <span class="e">&quot;q&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="e">&quot;=r&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="85" /><span class="Maybe">      85:</span> <a href="cpu.c_macros_ref.html#_YnVpbGRfbW1pb193cml0ZV8w"><span class="b">build_mmio_write</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_d3JpdGVxXzA_"><span class="b">writeq</span></a><span class="f">,</span> <span class="e">&quot;q&quot;</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="e">&quot;r&quot;</span><span class="f">,</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="86" /><span class="Maybe">      86:</span> 
<a name="87" /><span class="Maybe">      87:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmVhZHFfcmVsYXhlZF8w"><span class="b">readq_relaxed</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cmVhZHFfMA__"><span class="b">readq</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span>
<a name="88" /><span class="Maybe">      88:</span> 
<a name="89" /><span class="Maybe">      89:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfcmVhZHFfMA__"><span class="b">__raw_readq</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span>        <a href="cpu.c_macros_noref.html#_cmVhZHFfMA__"><span class="b">readq</span></a><span class="f">(</span><span class="b">a</span><span class="f">)</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19yYXdfd3JpdGVxXzA_"><span class="b">__raw_writeq</span></a><span class="f">(</span><span class="b">val</span><span class="f">,</span> <span class="b">addr</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_d3JpdGVxXzA_"><span class="b">writeq</span></a><span class="f">(</span><span class="b">val</span><span class="f">,</span> <span class="b">addr</span><span class="f">)</span>
<a name="91" /><span class="Maybe">      91:</span> 
<a name="92" /><span class="Maybe">      92:</span> <span class="k">/* Let people know that we have them */</span>
<a name="93" /><span class="Maybe">      93:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmVhZHFfMA__"><span class="b">readq</span></a>            <a href="cpu.c_macros_noref.html#_cmVhZHFfMA__"><span class="b">readq</span></a>
<a name="94" /><span class="Maybe">      94:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d3JpdGVxXzA_"><span class="b">writeq</span></a>            <a href="cpu.c_macros_noref.html#_d3JpdGVxXzA_"><span class="b">writeq</span></a>
<a name="95" /><span class="Maybe">      95:</span> 
<a name="96" /><span class="Maybe">      96:</span> <span class="f">#</span><span class="n">endif</span>
<a name="97" /><span class="Maybe">      97:</span> 
<a name="98" /><span class="Maybe">      98:</span> <span class="k">/**</span>
<a name="99" /><span class="Maybe">      99:</span> <span class="k"> *    virt_to_phys    -    map virtual addresses to physical</span>
<a name="100" /><span class="Maybe">     100:</span> <span class="k"> *    @address: address to remap</span>
<a name="101" /><span class="Maybe">     101:</span> <span class="k"> *</span>
<a name="102" /><span class="Maybe">     102:</span> <span class="k"> *    The returned physical address is the physical (CPU) mapping for</span>
<a name="103" /><span class="Maybe">     103:</span> <span class="k"> *    the memory address given. It is only valid to use this function on</span>
<a name="104" /><span class="Maybe">     104:</span> <span class="k"> *    addresses directly mapped or allocated via kmalloc.</span>
<a name="105" /><span class="Maybe">     105:</span> <span class="k"> *</span>
<a name="106" /><span class="Maybe">     106:</span> <span class="k"> *    This function does not give bus mappings for DMA transfers. In</span>
<a name="107" /><span class="Maybe">     107:</span> <span class="k"> *    almost all conceivable cases a device driver should not be using</span>
<a name="108" /><span class="Maybe">     108:</span> <span class="k"> *    this function</span>
<a name="109" /><span class="Maybe">     109:</span> <span class="k"> */</span>
<a name="110" /><span class="Maybe">     110:</span> 
<a name="111" /><span class="Maybe">     111:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">phys_addr_t</span> <span class="b">virt_to_phys</span><span class="f">(</span><span class="m">volatile</span> <span class="m">void</span> <span class="f">*</span><span class="b">address</span><span class="f">)</span>
<a name="112" /><span class="Maybe">     112:</span> <span class="f">{</span>
<a name="113" /><span class="Maybe">     113:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wYV8w"><span class="b">__pa</span></a><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="114" /><span class="Maybe">     114:</span> <span class="f">}</span>
<a name="115" /><span class="Maybe">     115:</span> 
<a name="116" /><span class="Maybe">     116:</span> <span class="k">/**</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="k"> *    phys_to_virt    -    map physical address to virtual</span>
<a name="118" /><span class="Maybe">     118:</span> <span class="k"> *    @address: address to remap</span>
<a name="119" /><span class="Maybe">     119:</span> <span class="k"> *</span>
<a name="120" /><span class="Maybe">     120:</span> <span class="k"> *    The returned virtual address is a current CPU mapping for</span>
<a name="121" /><span class="Maybe">     121:</span> <span class="k"> *    the memory address given. It is only valid to use this function on</span>
<a name="122" /><span class="Maybe">     122:</span> <span class="k"> *    addresses that have a kernel mapping</span>
<a name="123" /><span class="Maybe">     123:</span> <span class="k"> *</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="k"> *    This function does not handle bus mappings for DMA transfers. In</span>
<a name="125" /><span class="Maybe">     125:</span> <span class="k"> *    almost all conceivable cases a device driver should not be using</span>
<a name="126" /><span class="Maybe">     126:</span> <span class="k"> *    this function</span>
<a name="127" /><span class="Maybe">     127:</span> <span class="k"> */</span>
<a name="128" /><span class="Maybe">     128:</span> 
<a name="129" /><span class="Maybe">     129:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="f">*</span><span class="b">phys_to_virt</span><span class="f">(</span><span class="b">phys_addr_t</span> <span class="b">address</span><span class="f">)</span>
<a name="130" /><span class="Maybe">     130:</span> <span class="f">{</span>
<a name="131" /><span class="Maybe">     131:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="132" /><span class="Maybe">     132:</span> <span class="f">}</span>
<a name="133" /><span class="Maybe">     133:</span> 
<a name="134" /><span class="Maybe">     134:</span> <span class="k">/*</span>
<a name="135" /><span class="Maybe">     135:</span> <span class="k"> * Change &quot;struct page&quot; to physical address.</span>
<a name="136" /><span class="Maybe">     136:</span> <span class="k"> */</span>
<a name="137" /><span class="Maybe">     137:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGFnZV90b19waHlzXzA_"><span class="b">page_to_phys</span></a><span class="f">(</span><span class="b">page</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="b">dma_addr_t</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_cGFnZV90b19wZm5fMA__"><span class="b">page_to_pfn</span></a><span class="f">(</span><span class="b">page</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="138" /><span class="Maybe">     138:</span> 
<a name="139" /><span class="Maybe">     139:</span> <span class="k">/*</span>
<a name="140" /><span class="Maybe">     140:</span> <span class="k"> * ISA I/O bus memory addresses are 1:1 with the physical address.</span>
<a name="141" /><span class="Maybe">     141:</span> <span class="k"> * However, we truncate the address to unsigned int to avoid undesirable</span>
<a name="142" /><span class="Maybe">     142:</span> <span class="k"> * promitions in legacy drivers.</span>
<a name="143" /><span class="Maybe">     143:</span> <span class="k"> */</span>
<a name="144" /><span class="Maybe">     144:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">isa_virt_to_bus</span><span class="f">(</span><span class="m">volatile</span> <span class="m">void</span> <span class="f">*</span><span class="b">address</span><span class="f">)</span>
<a name="145" /><span class="Maybe">     145:</span> <span class="f">{</span>
<a name="146" /><span class="Maybe">     146:</span>     <span class="m">return</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span><span class="f">)</span><span class="b">virt_to_phys</span><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="147" /><span class="Maybe">     147:</span> <span class="f">}</span>
<a name="148" /><span class="Maybe">     148:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aXNhX3BhZ2VfdG9fYnVzXzA_"><span class="b">isa_page_to_bus</span></a><span class="f">(</span><span class="b">page</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span><span class="f">)</span><a href="cpu.c_macros_noref.html#_cGFnZV90b19waHlzXzA_"><span class="b">page_to_phys</span></a><span class="f">(</span><span class="b">page</span><span class="f">)</span><span class="f">)</span>
<a name="149" /><span class="Maybe">     149:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aXNhX2J1c190b192aXJ0XzA_"><span class="b">isa_bus_to_virt</span></a>        <span class="b">phys_to_virt</span>
<a name="150" /><span class="Maybe">     150:</span> 
<a name="151" /><span class="Maybe">     151:</span> <span class="k">/*</span>
<a name="152" /><span class="Maybe">     152:</span> <span class="k"> * However PCI ones are not necessarily 1:1 and therefore these interfaces</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="k"> * are forbidden in portable PCI drivers.</span>
<a name="154" /><span class="Maybe">     154:</span> <span class="k"> *</span>
<a name="155" /><span class="Maybe">     155:</span> <span class="k"> * Allow them on x86 for legacy drivers, though.</span>
<a name="156" /><span class="Maybe">     156:</span> <span class="k"> */</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_dmlydF90b19idXNfMA__"><span class="b">virt_to_bus</span></a> <span class="b">virt_to_phys</span>
<a name="158" /><span class="Maybe">     158:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YnVzX3RvX3ZpcnRfMA__"><span class="b">bus_to_virt</span></a> <span class="b">phys_to_virt</span>
<a name="159" /><span class="Maybe">     159:</span> 
<a name="160" /><span class="Maybe">     160:</span> <span class="k">/**</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="k"> * ioremap     -   map bus memory into CPU space</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="k"> * @offset:    bus address of the memory</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="k"> * @size:      size of the resource to map</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="k"> *</span>
<a name="165" /><span class="Maybe">     165:</span> <span class="k"> * ioremap performs a platform specific sequence of operations to</span>
<a name="166" /><span class="Maybe">     166:</span> <span class="k"> * make bus memory CPU accessible via the readb/readw/readl/writeb/</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="k"> * writew/writel functions and the other mmio helpers. The returned</span>
<a name="168" /><span class="Maybe">     168:</span> <span class="k"> * address is not guaranteed to be usable directly as a virtual</span>
<a name="169" /><span class="Maybe">     169:</span> <span class="k"> * address.</span>
<a name="170" /><span class="Maybe">     170:</span> <span class="k"> *</span>
<a name="171" /><span class="Maybe">     171:</span> <span class="k"> * If the area you are trying to map is a PCI BAR you should have a</span>
<a name="172" /><span class="Maybe">     172:</span> <span class="k"> * look at pci_iomap().</span>
<a name="173" /><span class="Maybe">     173:</span> <span class="k"> */</span>
<a name="174" /><span class="Maybe">     174:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">ioremap_nocache</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">offset</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">ioremap_cache</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">offset</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">ioremap_prot</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">offset</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">,</span>
<a name="177" /><span class="Maybe">     177:</span>                 <span class="m">unsigned</span> <span class="m">long</span> <span class="b">prot_val</span><span class="f">)</span><span class="f">;</span>
<a name="178" /><span class="Maybe">     178:</span> 
<a name="179" /><span class="Maybe">     179:</span> <span class="k">/*</span>
<a name="180" /><span class="Maybe">     180:</span> <span class="k"> * The default ioremap() behavior is non-cached:</span>
<a name="181" /><span class="Maybe">     181:</span> <span class="k"> */</span>
<a name="182" /><span class="Maybe">     182:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">ioremap</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">offset</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span>
<a name="183" /><span class="Maybe">     183:</span> <span class="f">{</span>
<a name="184" /><span class="Maybe">     184:</span>     <span class="m">return</span> <span class="b">ioremap_nocache</span><span class="f">(</span><span class="b">offset</span><span class="f">,</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="185" /><span class="Maybe">     185:</span> <span class="f">}</span>
<a name="186" /><span class="Maybe">     186:</span> 
<a name="187" /><span class="Maybe">     187:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">iounmap</span><span class="f">(</span><span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">)</span><span class="f">;</span>
<a name="188" /><span class="Maybe">     188:</span> 
<a name="189" /><span class="Maybe">     189:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">set_iounmap_nonlazy</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="190" /><span class="Maybe">     190:</span> 
<a name="191" /><span class="Maybe">     191:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19LRVJORUxfX18w"><span class="b">__KERNEL__</span></a>
<a name="192" /><span class="Maybe">     192:</span> 
<a name="193" /><span class="Maybe">     193:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">-</span><span class="b">generic</span><span class="f">/</span><span class="b">iomap</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="194" /><span class="Maybe">     194:</span> 
<a name="195" /><span class="Maybe">     195:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">vmalloc</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="196" /><span class="Maybe">     196:</span> 
<a name="197" /><span class="Maybe">     197:</span> <span class="k">/*</span>
<a name="198" /><span class="Maybe">     198:</span> <span class="k"> * Convert a virtual cached pointer to an uncached pointer</span>
<a name="199" /><span class="Maybe">     199:</span> <span class="k"> */</span>
<a name="200" /><span class="Maybe">     200:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_eGxhdGVfZGV2X2ttZW1fcHRyXzA_"><span class="b">xlate_dev_kmem_ptr</span></a><span class="f">(</span><span class="b">p</span><span class="f">)</span>    <span class="b">p</span>
<a name="201" /><span class="Maybe">     201:</span> 
<a name="202" /><span class="Maybe">     202:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="203" /><span class="Maybe">     203:</span> <span class="b">memset_io</span><span class="f">(</span><span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">char</span> <span class="b">val</span><span class="f">,</span> <span class="b">size_t</span> <span class="b">count</span><span class="f">)</span>
<a name="204" /><span class="Maybe">     204:</span> <span class="f">{</span>
<a name="205" /><span class="Maybe">     205:</span>     <span class="b">memset</span><span class="f">(</span><span class="f">(</span><span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">addr</span><span class="f">,</span> <span class="b">val</span><span class="f">,</span> <span class="b">count</span><span class="f">)</span><span class="f">;</span>
<a name="206" /><span class="Maybe">     206:</span> <span class="f">}</span>
<a name="207" /><span class="Maybe">     207:</span> 
<a name="208" /><span class="Maybe">     208:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="209" /><span class="Maybe">     209:</span> <span class="b">memcpy_fromio</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">dst</span><span class="f">,</span> <span class="m">const</span> <span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">src</span><span class="f">,</span> <span class="b">size_t</span> <span class="b">count</span><span class="f">)</span>
<a name="210" /><span class="Maybe">     210:</span> <span class="f">{</span>
<a name="211" /><span class="Maybe">     211:</span>     <a href="cpu.c_macros_ref.html#_bWVtY3B5XzA_"><span class="b">memcpy</span></a><span class="f">(</span><span class="b">dst</span><span class="f">,</span> <span class="f">(</span><span class="m">const</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">src</span><span class="f">,</span> <span class="b">count</span><span class="f">)</span><span class="f">;</span>
<a name="212" /><span class="Maybe">     212:</span> <span class="f">}</span>
<a name="213" /><span class="Maybe">     213:</span> 
<a name="214" /><span class="Maybe">     214:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="215" /><span class="Maybe">     215:</span> <span class="b">memcpy_toio</span><span class="f">(</span><span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">dst</span><span class="f">,</span> <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">src</span><span class="f">,</span> <span class="b">size_t</span> <span class="b">count</span><span class="f">)</span>
<a name="216" /><span class="Maybe">     216:</span> <span class="f">{</span>
<a name="217" /><span class="Maybe">     217:</span>     <a href="cpu.c_macros_ref.html#_bWVtY3B5XzA_"><span class="b">memcpy</span></a><span class="f">(</span><span class="f">(</span><span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">dst</span><span class="f">,</span> <span class="b">src</span><span class="f">,</span> <span class="b">count</span><span class="f">)</span><span class="f">;</span>
<a name="218" /><span class="Maybe">     218:</span> <span class="f">}</span>
<a name="219" /><span class="Maybe">     219:</span> 
<a name="220" /><span class="Maybe">     220:</span> <span class="k">/*</span>
<a name="221" /><span class="Maybe">     221:</span> <span class="k"> * ISA space is &apos;always mapped&apos; on a typical x86 system, no need to</span>
<a name="222" /><span class="Maybe">     222:</span> <span class="k"> * explicitly ioremap() it. The fact that the ISA IO space is mapped</span>
<a name="223" /><span class="Maybe">     223:</span> <span class="k"> * to PAGE_OFFSET is pure coincidence - it does not mean ISA values</span>
<a name="224" /><span class="Maybe">     224:</span> <span class="k"> * are physical addresses. The following constant pointer can be</span>
<a name="225" /><span class="Maybe">     225:</span> <span class="k"> * used as the IO-area pointer (it can be iounmapped as well, so the</span>
<a name="226" /><span class="Maybe">     226:</span> <span class="k"> * analogy with PCI is quite large):</span>
<a name="227" /><span class="Maybe">     227:</span> <span class="k"> */</span>
<a name="228" /><span class="Maybe">     228:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19JU0FfSU9fYmFzZV8w"><span class="b">__ISA_IO_base</span></a> <span class="f">(</span><span class="f">(</span><span class="m">char</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_UEFHRV9PRkZTRVRfMA__"><span class="b">PAGE_OFFSET</span></a><span class="f">)</span><span class="f">)</span>
<a name="229" /><span class="Maybe">     229:</span> 
<a name="230" /><span class="Maybe">     230:</span> <span class="k">/*</span>
<a name="231" /><span class="Maybe">     231:</span> <span class="k"> *    Cache management</span>
<a name="232" /><span class="Maybe">     232:</span> <span class="k"> *</span>
<a name="233" /><span class="Maybe">     233:</span> <span class="k"> *    This needed for two cases</span>
<a name="234" /><span class="Maybe">     234:</span> <span class="k"> *    1. Out of order aware processors</span>
<a name="235" /><span class="Maybe">     235:</span> <span class="k"> *    2. Accidentally out of order processors (PPro errata #51)</span>
<a name="236" /><span class="Maybe">     236:</span> <span class="k"> */</span>
<a name="237" /><span class="Maybe">     237:</span> 
<a name="238" /><span class="Maybe">     238:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">flush_write_buffers</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="239" /><span class="Maybe">     239:</span> <span class="f">{</span>
<a name="240" /><span class="False">     240:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_X86_OOSTORE</span><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_X86_PPRO_FENCE</span><span class="f">)</span>
<a name="241" /><span class="False">     241:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;lock; addl $0,0(%%esp)&quot;</span><span class="f">:</span> <span class="f">:</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>
<a name="242" /><span class="Maybe">     242:</span> <span class="f">#</span><span class="n">endif</span>
<a name="243" /><span class="Maybe">     243:</span> <span class="f">}</span>
<a name="244" /><span class="Maybe">     244:</span> 
<a name="245" /><span class="Maybe">     245:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __KERNEL__ */</span>
<a name="246" /><span class="Maybe">     246:</span> 
<a name="247" /><span class="Maybe">     247:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">native_io_delay</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="248" /><span class="Maybe">     248:</span> 
<a name="249" /><span class="Maybe">     249:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">io_delay_type</span><span class="f">;</span>
<a name="250" /><span class="Maybe">     250:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">io_delay_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="251" /><span class="Maybe">     251:</span> 
<a name="252" /><span class="False">     252:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_PARAVIRT</span><span class="f">)</span>
<a name="253" /><span class="False">     253:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">paravirt</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="254" /><span class="Maybe">     254:</span> <span class="f">#</span><span class="n">else</span>
<a name="255" /><span class="Maybe">     255:</span> 
<a name="256" /><span class="Maybe">     256:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">slow_down_io</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="257" /><span class="Maybe">     257:</span> <span class="f">{</span>
<a name="258" /><span class="Maybe">     258:</span>     <span class="b">native_io_delay</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="259" /><span class="False">     259:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">REALLY_SLOW_IO</span>
<a name="260" /><span class="False">     260:</span>     <span class="b">native_io_delay</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="261" /><span class="False">     261:</span>     <span class="b">native_io_delay</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="262" /><span class="False">     262:</span>     <span class="b">native_io_delay</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="263" /><span class="Maybe">     263:</span> <span class="f">#</span><span class="n">endif</span>
<a name="264" /><span class="Maybe">     264:</span> <span class="f">}</span>
<a name="265" /><span class="Maybe">     265:</span> 
<a name="266" /><span class="Maybe">     266:</span> <span class="f">#</span><span class="n">endif</span>
<a name="267" /><span class="Maybe">     267:</span> 
<a name="268" /><span class="Maybe">     268:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QlVJTERJT18w"><span class="b">BUILDIO</span></a><span class="f">(</span><span class="b">bwl</span><span class="f">,</span> <span class="b">bw</span><span class="f">,</span> <span class="b">type</span><span class="f">)</span>                        \
<a name="269" /><span class="Maybe">     269:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">out</span><span class="f">##</span><span class="b">bwl</span><span class="f">(</span><span class="m">unsigned</span> <span class="b">type</span> <span class="b">value</span><span class="f">,</span> <span class="m">int</span> <span class="b">port</span><span class="f">)</span>        \
<a name="270" /><span class="Maybe">     270:</span> <span class="f">{</span>                                    \
<a name="271" /><span class="Maybe">     271:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;out&quot;</span> <span class="f">#</span><span class="b">bwl</span> <span class="e">&quot; %&quot;</span> <span class="f">#</span><span class="b">bw</span> <span class="e">&quot;0, %w1&quot;</span>            \
<a name="272" /><span class="Maybe">     272:</span>              <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;a&quot;</span><span class="f">(</span><span class="b">value</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;Nd&quot;</span><span class="f">(</span><span class="b">port</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="273" /><span class="Maybe">     273:</span> <span class="f">}</span>                                    \
<a name="274" /><span class="Maybe">     274:</span>                                     \
<a name="275" /><span class="Maybe">     275:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="b">type</span> <span class="b">in</span><span class="f">##</span><span class="b">bwl</span><span class="f">(</span><span class="m">int</span> <span class="b">port</span><span class="f">)</span>                \
<a name="276" /><span class="Maybe">     276:</span> <span class="f">{</span>                                    \
<a name="277" /><span class="Maybe">     277:</span>     <span class="m">unsigned</span> <span class="b">type</span> <span class="b">value</span><span class="f">;</span>                        \
<a name="278" /><span class="Maybe">     278:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;in&quot;</span> <span class="f">#</span><span class="b">bwl</span> <span class="e">&quot; %w1, %&quot;</span> <span class="f">#</span><span class="b">bw</span> <span class="e">&quot;0&quot;</span>            \
<a name="279" /><span class="Maybe">     279:</span>              <span class="f">:</span> <span class="e">&quot;=a&quot;</span><span class="f">(</span><span class="b">value</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;Nd&quot;</span><span class="f">(</span><span class="b">port</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="280" /><span class="Maybe">     280:</span>     <span class="m">return</span> <span class="b">value</span><span class="f">;</span>                            \
<a name="281" /><span class="Maybe">     281:</span> <span class="f">}</span>                                    \
<a name="282" /><span class="Maybe">     282:</span>                                     \
<a name="283" /><span class="Maybe">     283:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">out</span><span class="f">##</span><span class="b">bwl</span><span class="f">##</span><span class="b">_p</span><span class="f">(</span><span class="m">unsigned</span> <span class="b">type</span> <span class="b">value</span><span class="f">,</span> <span class="m">int</span> <span class="b">port</span><span class="f">)</span>        \
<a name="284" /><span class="Maybe">     284:</span> <span class="f">{</span>                                    \
<a name="285" /><span class="Maybe">     285:</span>     <span class="b">out</span><span class="f">##</span><span class="b">bwl</span><span class="f">(</span><span class="b">value</span><span class="f">,</span> <span class="b">port</span><span class="f">)</span><span class="f">;</span>                        \
<a name="286" /><span class="Maybe">     286:</span>     <span class="b">slow_down_io</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                            \
<a name="287" /><span class="Maybe">     287:</span> <span class="f">}</span>                                    \
<a name="288" /><span class="Maybe">     288:</span>                                     \
<a name="289" /><span class="Maybe">     289:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="b">type</span> <span class="b">in</span><span class="f">##</span><span class="b">bwl</span><span class="f">##</span><span class="b">_p</span><span class="f">(</span><span class="m">int</span> <span class="b">port</span><span class="f">)</span>            \
<a name="290" /><span class="Maybe">     290:</span> <span class="f">{</span>                                    \
<a name="291" /><span class="Maybe">     291:</span>     <span class="m">unsigned</span> <span class="b">type</span> <span class="b">value</span> <span class="f">=</span> <span class="b">in</span><span class="f">##</span><span class="b">bwl</span><span class="f">(</span><span class="b">port</span><span class="f">)</span><span class="f">;</span>                \
<a name="292" /><span class="Maybe">     292:</span>     <span class="b">slow_down_io</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                            \
<a name="293" /><span class="Maybe">     293:</span>     <span class="m">return</span> <span class="b">value</span><span class="f">;</span>                            \
<a name="294" /><span class="Maybe">     294:</span> <span class="f">}</span>                                    \
<a name="295" /><span class="Maybe">     295:</span>                                     \
<a name="296" /><span class="Maybe">     296:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">outs</span><span class="f">##</span><span class="b">bwl</span><span class="f">(</span><span class="m">int</span> <span class="b">port</span><span class="f">,</span> <span class="m">const</span> <span class="m">void</span> <span class="f">*</span><span class="b">addr</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">count</span><span class="f">)</span> \
<a name="297" /><span class="Maybe">     297:</span> <span class="f">{</span>                                    \
<a name="298" /><span class="Maybe">     298:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;rep; outs&quot;</span> <span class="f">#</span><span class="b">bwl</span>                    \
<a name="299" /><span class="Maybe">     299:</span>              <span class="f">:</span> <span class="e">&quot;+S&quot;</span><span class="f">(</span><span class="b">addr</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+c&quot;</span><span class="f">(</span><span class="b">count</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;d&quot;</span><span class="f">(</span><span class="b">port</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="300" /><span class="Maybe">     300:</span> <span class="f">}</span>                                    \
<a name="301" /><span class="Maybe">     301:</span>                                     \
<a name="302" /><span class="Maybe">     302:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">ins</span><span class="f">##</span><span class="b">bwl</span><span class="f">(</span><span class="m">int</span> <span class="b">port</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">addr</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">count</span><span class="f">)</span>    \
<a name="303" /><span class="Maybe">     303:</span> <span class="f">{</span>                                    \
<a name="304" /><span class="Maybe">     304:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;rep; ins&quot;</span> <span class="f">#</span><span class="b">bwl</span>                    \
<a name="305" /><span class="Maybe">     305:</span>              <span class="f">:</span> <span class="e">&quot;+D&quot;</span><span class="f">(</span><span class="b">addr</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+c&quot;</span><span class="f">(</span><span class="b">count</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;d&quot;</span><span class="f">(</span><span class="b">port</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="306" /><span class="Maybe">     306:</span> <span class="f">}</span>
<a name="307" /><span class="Maybe">     307:</span> 
<a name="308" /><span class="Maybe">     308:</span> <a href="cpu.c_macros_ref.html#_QlVJTERJT18w"><span class="b">BUILDIO</span></a><span class="f">(</span><span class="b">b</span><span class="f">,</span> <span class="b">b</span><span class="f">,</span> <span class="m">char</span><span class="f">)</span>
<a name="309" /><span class="Maybe">     309:</span> <a href="cpu.c_macros_ref.html#_QlVJTERJT18w"><span class="b">BUILDIO</span></a><span class="f">(</span><span class="b">w</span><span class="f">,</span> <span class="b">w</span><span class="f">,</span> <span class="m">short</span><span class="f">)</span>
<a name="310" /><span class="Maybe">     310:</span> <a href="cpu.c_macros_ref.html#_QlVJTERJT18w"><span class="b">BUILDIO</span></a><span class="f">(</span><span class="b">l</span><span class="f">,</span> <span class="f">,</span> <span class="m">int</span><span class="f">)</span>
<a name="311" /><span class="Maybe">     311:</span> 
<a name="312" /><span class="Maybe">     312:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">*</span><span class="b">xlate_dev_mem_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">phys</span><span class="f">)</span><span class="f">;</span>
<a name="313" /><span class="Maybe">     313:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">unxlate_dev_mem_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">phys</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">addr</span><span class="f">)</span><span class="f">;</span>
<a name="314" /><span class="Maybe">     314:</span> 
<a name="315" /><span class="Maybe">     315:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">ioremap_change_attr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">vaddr</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">,</span>
<a name="316" /><span class="Maybe">     316:</span>                 <span class="m">unsigned</span> <span class="m">long</span> <span class="b">prot_val</span><span class="f">)</span><span class="f">;</span>
<a name="317" /><span class="Maybe">     317:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">ioremap_wc</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">offset</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="318" /><span class="Maybe">     318:</span> 
<a name="319" /><span class="Maybe">     319:</span> <span class="k">/*</span>
<a name="320" /><span class="Maybe">     320:</span> <span class="k"> * early_ioremap() and early_iounmap() are for temporary early boot-time</span>
<a name="321" /><span class="Maybe">     321:</span> <span class="k"> * mappings, before the real ioremap() is functional.</span>
<a name="322" /><span class="Maybe">     322:</span> <span class="k"> * A boot-time mapping is currently limited to at most 16 pages.</span>
<a name="323" /><span class="Maybe">     323:</span> <span class="k"> */</span>
<a name="324" /><span class="Maybe">     324:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">early_ioremap_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="325" /><span class="Maybe">     325:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">early_ioremap_reset</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="326" /><span class="Maybe">     326:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">early_ioremap</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">phys_addr</span><span class="f">,</span>
<a name="327" /><span class="Maybe">     327:</span>                    <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="328" /><span class="Maybe">     328:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">early_memremap</span><span class="f">(</span><span class="b">resource_size_t</span> <span class="b">phys_addr</span><span class="f">,</span>
<a name="329" /><span class="Maybe">     329:</span>                     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="330" /><span class="Maybe">     330:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">early_iounmap</span><span class="f">(</span><span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="331" /><span class="Maybe">     331:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">fixup_early_ioremap</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="332" /><span class="Maybe">     332:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">is_early_ioremap_ptep</span><span class="f">(</span><span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="333" /><span class="Maybe">     333:</span> 
<a name="334" /><span class="False">     334:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_XEN</span>
<a name="335" /><span class="False">     335:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">xen</span><span class="f">/</span><span class="b">xen</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="336" /><span class="False">     336:</span> <span class="m">struct</span> <span class="b">bio_vec</span><span class="f">;</span>
<a name="337" /><span class="False">     337:</span> 
<a name="338" /><span class="False">     338:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">xen_biovec_phys_mergeable</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">bio_vec</span> <span class="f">*</span><span class="b">vec1</span><span class="f">,</span>
<a name="339" /><span class="False">     339:</span>                       <span class="m">const</span> <span class="m">struct</span> <span class="b">bio_vec</span> <span class="f">*</span><span class="b">vec2</span><span class="f">)</span><span class="f">;</span>
<a name="340" /><span class="False">     340:</span> 
<a name="341" /><span class="False">     341:</span> <span class="f">#</span><span class="n">define</span> <span class="b">BIOVEC_PHYS_MERGEABLE</span><span class="f">(</span><span class="b">vec1</span><span class="f">,</span> <span class="b">vec2</span><span class="f">)</span>                \
<a name="342" /><span class="False">     342:</span>     <span class="f">(</span><span class="b">__BIOVEC_PHYS_MERGEABLE</span><span class="f">(</span><span class="b">vec1</span><span class="f">,</span> <span class="b">vec2</span><span class="f">)</span> <span class="f">&amp;&amp;</span>                \
<a name="343" /><span class="False">     343:</span>      <span class="f">(</span><span class="f">!</span><span class="b">xen_domain</span><span class="f">(</span><span class="f">)</span> <span class="f">||</span> <span class="b">xen_biovec_phys_mergeable</span><span class="f">(</span><span class="b">vec1</span><span class="f">,</span> <span class="b">vec2</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="344" /><span class="Maybe">     344:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* CONFIG_XEN */</span>
<a name="345" /><span class="Maybe">     345:</span> 
<a name="346" /><span class="Maybe">     346:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_SU9fU1BBQ0VfTElNSVRfMA__"><span class="b">IO_SPACE_LIMIT</span></a> <span class="c">0xffff</span>
<a name="347" /><span class="Maybe">     347:</span> 
<a name="348" /><span class="Maybe">     348:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX01UUlJfMA__"><span class="b">CONFIG_MTRR</span></a>
<a name="349" /><span class="Maybe">     349:</span> <span class="m">extern</span> <span class="m">int</span> <a href="cpu.c_macros_ref.html#_X19tdXN0X2NoZWNrXzE_"><span class="b">__must_check</span></a> <a href="cpu.c_macros_noref.html#_YXJjaF9waHlzX3djX2FkZF8w"><span class="b">arch_phys_wc_add</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">base</span><span class="f">,</span>
<a name="350" /><span class="Maybe">     350:</span>                      <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="351" /><span class="Maybe">     351:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">arch_phys_wc_del</span><span class="f">(</span><span class="m">int</span> <span class="b">handle</span><span class="f">)</span><span class="f">;</span>
<a name="352" /><span class="Maybe">     352:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXJjaF9waHlzX3djX2FkZF8w"><span class="b">arch_phys_wc_add</span></a> <a href="cpu.c_macros_noref.html#_YXJjaF9waHlzX3djX2FkZF8w"><span class="b">arch_phys_wc_add</span></a>
<a name="353" /><span class="Maybe">     353:</span> <span class="f">#</span><span class="n">endif</span>
<a name="354" /><span class="Maybe">     354:</span> 
<a name="355" /><span class="True">     355:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_IO_H */</span>
<a name="356" /><span class="True">     356:</span> </pre>
  </body>
</html>
